/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package imp.gestores;

import imp.DAO.*;
import imp.util.*;
import imp.clases.*;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;



import org.richfaces.component.html.HtmlDataTable;

/**
 *
 * @author Alvaro Uyaguari
 */
public class GestorFoda extends BeanUtil{

    private Emprendimiento currentEmprendimiento;

    private Objetivo currentObjetivo;
    private Accion currentAccion;

    private HtmlDataTable tablaObjetivos;
    private HtmlDataTable tablaAcciones;

    private Boolean renderObjetivo;
    private Boolean renderAccion;

    private String accionObjetivo;
    private String accionAccion;


    //Para Buscadores
    private String filtroBusqueda;
    private DAO dao = (DAO)ServiceFinder.findBean("SpringHibernateDao");

    public GestorFoda(){
        this.tablaObjetivos=new HtmlDataTable();
        this.tablaAcciones=new HtmlDataTable();
        currentObjetivo=new Objetivo();
        currentAccion=new Accion();

    }

    // Para Emprendimiento:

    public String grabarEmprendimiento() {

        try {

                dao.flush();
                dao.persist(this.currentEmprendimiento);


        } catch (Exception e) {
            super.addErrorMessage(e.getMessage());
        }

        return null;
    }

    public Emprendimiento getCurrentEmprendimiento() {
        return currentEmprendimiento;
    }

    public void setCurrentEmprendimiento(Emprendimiento currentEmprendimiento) {
        this.currentEmprendimiento = currentEmprendimiento;
    }

   


    //Metodos para Objetivos

     public String grabarObjetivo(){
            if (this.accionObjetivo.equals("Ins")){

                this.currentEmprendimiento.addObjetivo(currentObjetivo);

          }
           this.renderObjetivo=false;
           return null;

       }
       public String cerrarObjetivo(){
           this.renderObjetivo=false;
           return null;

       }
       public String eliminarObjetivo(){
           currentObjetivo = (Objetivo)tablaObjetivos.getRowData();
           this.currentEmprendimiento.removeObjetivo(currentObjetivo);
           return null;
       }
       public String editarObjetivo(){
            this.accionObjetivo="Mod";
                this.renderObjetivo=true;
		currentObjetivo = (Objetivo)tablaObjetivos.getRowData();
		return null;
       }
       public String nuevoObjetivo(){
                this.accionObjetivo="Ins";
                this.renderObjetivo=true;
		currentObjetivo = new Objetivo();
		return null;
       }


        //Metodos para Acciones

     public String grabarAccion(){
            if (this.accionAccion.equals("Ins")){

                this.currentObjetivo.addAccion(currentAccion);

          }
           this.renderAccion=false;
           return null;

       }
       public String cerrarAccion(){
           this.renderAccion=false;
           return null;

       }
       public String eliminarAccion(){
           currentAccion = (Accion)tablaAcciones.getRowData();
           this.currentObjetivo.removeAccion(currentAccion);
           return null;
       }
       public String editarAccion(){
            this.accionAccion="Mod";
                this.renderAccion=true;
		currentAccion = (Accion)tablaAcciones.getRowData();
		return null;
       }
       public String nuevoAccion(){
                this.accionAccion="Ins";
                this.renderAccion=true;
		currentAccion = new Accion();
		return null;
       }


    //Metodos Sets and Gets

       
    public String getAccionAccion() {
        return accionAccion;
    }

    public void setAccionAccion(String accionAccion) {
        this.accionAccion = accionAccion;
    }

    public String getAccionObjetivo() {
        return accionObjetivo;
    }

    public void setAccionObjetivo(String accionObjetivo) {
        this.accionObjetivo = accionObjetivo;
    }

    public Accion getCurrentAccion() {
        return currentAccion;
    }

    public void setCurrentAccion(Accion currentAccion) {
        this.currentAccion = currentAccion;
    }

    public Boolean getRenderAccion() {
        return renderAccion;
    }

    public void setRenderAccion(Boolean renderAccion) {
        this.renderAccion = renderAccion;
    }

    public Boolean getRenderObjetivo() {
        return renderObjetivo;
    }

    public void setRenderObjetivo(Boolean renderObjetivo) {
        this.renderObjetivo = renderObjetivo;
    }

    public HtmlDataTable getTablaAcciones() {
        return tablaAcciones;
    }

    public void setTablaAcciones(HtmlDataTable tablaAcciones) {
        this.tablaAcciones = tablaAcciones;
    }

    public HtmlDataTable getTablaObjetivos() {
        return tablaObjetivos;
    }

    public void setTablaObjetivos(HtmlDataTable tablaObjetivos) {
        this.tablaObjetivos = tablaObjetivos;
    }

    public Objetivo getCurrentObjetivo() {
        return currentObjetivo;
    }

    public void setCurrentObjetivo(Objetivo currentObjetivo) {
        this.currentObjetivo = currentObjetivo;
    }







    //Metodos para Busuedas:

    public String getFiltroBusqueda() {
    return filtroBusqueda;
    }
    public void setFiltroBusqueda(String filtroBusqueda) {
    this.filtroBusqueda = filtroBusqueda;
    }


    //Validadores 500 Caracteres:
    public void validarQ(FacesContext context,
            UIComponent componentToValidate, Object value)
            throws ValidatorException {

        String texto = value.toString();
        int tamano = texto.length();

        //Valida que el tamano no sea mayor a un Numero:
        if (tamano > 500) {
            FacesMessage message = new FacesMessage("Ingrese maximo 500 caracteres en este campo. Tiene:"+tamano+" caracteres.");

            throw new ValidatorException(message);
        }

        return;
    }


    //Validadores 300 Caracteres:
    public void validarT(FacesContext context,
            UIComponent componentToValidate, Object value)
            throws ValidatorException {

        String texto = value.toString();
        int tamano = texto.length();

        //Valida que el tamano no sea mayor a un Numero:
        if (tamano > 300) {
            FacesMessage message = new FacesMessage("Ingrese maximo 300 caracteres en este campo. Tiene:"+tamano+" caracteres.");

            throw new ValidatorException(message);
        }

        return;
    }






    @Override
    protected void buscar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }


}
